﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DBQLTV;

namespace QuanLyThuVien
{
    public partial class frmMuonSach : Form
    {
        private frmMain mainForm = null;
        frmMuonSachCT formThemSach;
        List<int> listMaCuonSachMuon = new List<int>();
        List<DOCGIA> listDG = new List<DOCGIA>();
        DocGiaBUS docGiaBUS = new DocGiaBUS();
        int STT = 0;

        public frmMuonSach(Form callingForm)
        {
            mainForm = callingForm as frmMain;
            InitializeComponent();
        }
        
        private void frmMuonSach_Load(object sender, EventArgs e)
        {
            formThemSach = new frmMuonSachCT(this);

            listDG = docGiaBUS.GetListDocGia();
            foreach (DOCGIA dg in listDG)
            {
                comboBox_maDG.Items.Add(dg.MaDG);
            }
            if (formThemSach.HetSach)
            {
                MessageBox.Show("Thư viện hết sách!");
                this.Close();
            }
        }   
        private void CheckCondition()
        {
            int maDG = int.Parse(comboBox_maDG.Text);
            if (!Regulations.EligibleTheDocGia(docGiaBUS.GetDocGia(maDG).NgayHetHanThe))
                MessageBox.Show("Hết hạn thẻ độc giả!");
            if (!Regulations.EligibleDocGia_SachMuonQuaHan(maDG))
                MessageBox.Show("Độc giả có sách mượn quá hạn!");

        }
        private void button_themSach_Click(object sender, EventArgs e)
        {
            formThemSach.ShowDialog();
        }
     
        public bool UpdateDataTable()
        {
            string tenSach = formThemSach.TenSach;
            string tacGia = formThemSach.TacGia;
            string theLoai = formThemSach.TheLoai;
            int maCS = formThemSach.MaCuonSach;
            if (!listMaCuonSachMuon.Contains(maCS))
            {
                listMaCuonSachMuon.Add(maCS);
                STT++;
                dataGridView_muonSach.Rows.Add(STT, tenSach, maCS, theLoai, tacGia);
                return true;
            }
            else return false;
        }

        private void button_luu_Click(object sender, EventArgs e)
        {
            if (comboBox_maDG.Text == "")
                MessageBox.Show("Chưa nhập mã độc giả");
            else if(!comboBox_maDG.Items.Contains(int.Parse(comboBox_maDG.Text)))
                MessageBox.Show("Mã độc giả không tồn tại.");
            else if (listMaCuonSachMuon.Count != 0)
            {
                PhieuMuonSachBUS phieuMuonBus = new PhieuMuonSachBUS();
                phieuMuonBus.InsertPhieuMuon(int.Parse(comboBox_maDG.Text.ToString()),
                                             dateTimePicker_ngayMuon.Value.Date.ToString(),
                                             listMaCuonSachMuon);
                if (!Regulations.EligibleDocGia_SachMuonToiDa(int.Parse(comboBox_maDG.Text), dataGridView_muonSach.RowCount))
                {
                    ThamSoBUS thamsoBUS = new ThamSoBUS();
                    MessageBox.Show("Độc giả đã mượn quá nhiều sách cho phép! Cho phép mượn tối đa " + thamsoBUS.GetGiaTriThamSo(thamsoBUS.SoSachMuonToiDa) + " cuốn sách.");
                }
                else
                {
                    MessageBox.Show("Đã mượn thành công!");
                    this.Close();
                }
            }
            else MessageBox.Show("Chưa thêm sách mượn!", "Lỗi");
        }
        private void button_xoa_Click(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rowCol = dataGridView_muonSach.SelectedRows;
            if (rowCol.Count == 0)
                MessageBox.Show("Vui lòng chọn dòng cần xóa!");
            else
            {
                List<int> listRowIndex = new List<int>();
                for (int j = 0; j < rowCol.Count; j++)
                {
                    listRowIndex.Add(int.Parse(rowCol[j].Index.ToString()));
                }
                if (listRowIndex.Count > 0)
                {
                    foreach (int index in listRowIndex)
                    {
                        int maXoa = int.Parse(dataGridView_muonSach[2, index].Value.ToString());

                        listMaCuonSachMuon.Remove(maXoa);
                        dataGridView_muonSach.Rows.RemoveAt(index);
                    }

                    MessageBox.Show("Xóa thành công!");
                    STT = 0;
                    for (int i = 0; i < dataGridView_muonSach.RowCount - 1; i++)
                    {
                        STT++;
                        dataGridView_muonSach[0, i].Value = STT;
                    }
                }
            }
        }
        private void button_Huy_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void UpdateThongTin()
        {
            CheckCondition();
            tb_HoTen.Text = docGiaBUS.GetDocGia(int.Parse(comboBox_maDG.Text)).Ten;
        }

        private void tb_HoTen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
        private void comboBox_maDG_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                if (!comboBox_maDG.Items.Contains(int.Parse(comboBox_maDG.Text)))
                    MessageBox.Show("Mã độc giả không tồn tại!", "Lỗi");
                else UpdateThongTin();
        }
        private void comboBox_maDG_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
        private void comboBox_maDG_SelectedIndexChanged(object sender, EventArgs e)
        {
            UpdateThongTin();
        }   
    }
}
